package com.demo.user.config;

import com.alibaba.druid.pool.DruidDataSource;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

/** mysql 配置 druid 1.1 以下版本需要*/
//@ConfigurationProperties(prefix = "spring.datasource")
//@Component
@Data
public class MysqlConfig {

  private String username;
  private String password;
  private String url;
  private String driverClassName;

  @Bean
  @SuppressWarnings("all") // 抑制所有类型的警告
  public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName(
        driverClassName); // 如果不配置druid会根据url自动识别dbType，然后选择相应的driverClassName
    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    dataSource.setValidationQuery("SELECT x"); // 用来检测连接是否有效
    dataSource.setTestOnBorrow(false); // 借用连接时执行validationQuery检测连接是否有效，做了这个配置会降低性能
    dataSource.setTestOnReturn(false); // 归还连接时执行validationQuery检测连接是否有效，做了这个配置会降低性能
    // 连接空闲时检测，如果连接空闲时间大于timeBetweenEvictionRunsMillis指定的毫秒，执行validationQuery指定的SQL来检测连接是否有效
    dataSource.setTestWhileIdle(true); // 如果检测失败，则连接将被从池中去除
    dataSource.setTimeBetweenEvictionRunsMillis(60000); // 1分钟
    dataSource.setMaxActive(20);
    dataSource.setInitialSize(5);
    dataSource.setMaxWait(10000);
    dataSource.setMinEvictableIdleTimeMillis(600000);
    dataSource.setMaxEvictableIdleTimeMillis(900000);
    dataSource.setKeepAlive(true);
    return dataSource;
  }
}
